🔍 C'de Lineer Arama (Linear Search) Algoritması ve Basit Uygulaması
Bu Rehberde Ne Öğreneceksiniz?
Bu rehberde, Lineer Arama (Sıralı Arama) algoritmasının temel çalışma mantığını öğreneceksiniz.
Algoritmanın adım adım işleyişini, pseudo kodunu ve C dilinde uygulamasını inceleyeceğiz.
Ayrıca, en iyi ve en kötü durum karmaşıklıklarını analiz ederek performans farklarını anlamayı öğreneceksiniz.
🧠 1. Lineer Arama Nedir?
Lineer Arama, en temel arama algoritmalarından biridir.
Bu yöntem, aranan elemanı dizinin başından sonuna kadar sırayla kontrol eder.
- Eğer eşleşme bulunursa, elemanın indeksi döndürülür.
- Hiçbir eşleşme bulunmazsa, genellikle -1 değeriyle “bulunamadı” sonucu verilir.
📘 Avantajı: Basit ve her tür dizide çalışır (sıralı veya sırasız).
❗ Dezavantajı: Büyük dizilerde yavaştır, çünkü her elemanı tek tek kontrol eder.
🔢 2. Algoritmanın Adımları
Lineer Arama'nın işleyişi şu şekilde özetlenebilir:
- Arama, dizinin ilk elemanından başlar.
- Her eleman, aranan anahtar (key) ile karşılaştırılır.
- Eğer eşleşme varsa, elemanın indeksi döndürülür.
- Eşleşme yoksa bir sonraki elemana geçilir.
- Dizi sonuna kadar arama yapılır.
- Hiçbir eşleşme bulunamazsa
-1döndürülür.
🧩 3. Sözde Kod (Pseudo Code)
prosedur LINEER_ARA (dizi, anahtar)
dizi içindeki her bir öğe için:
eğer öğe == anahtar ise:
öğenin indeksini döndür
eğer sonuna gelindiyse:
diziden çık
döndür -1 (bulunamadı)
bitiş prosedur
🧠 Bu basit pseudo code, algoritmanın dil bağımsız mantığını gösterir.
💻 4. C Dilinde Lineer Arama Uygulaması
Aşağıda, C dilinde lineer arama algoritmasının uygulanışı verilmiştir. Bu örnekte dizi içinde bir değer aranır ve bulunduğunda dizin konumu ekrana yazdırılır.
#include <stdio.h>
// Lineer Arama fonksiyonu: dizideki değeri arar ve indeksi döndürür.
int LINEAR_SEARCH(int girdiDizisi[], int boyut, int deger)
{
for (int i = 0; i < boyut; i++)
if (girdiDizisi[i] == deger)
return i; // Eşleşme varsa, o anki indeksi döndür
return -1; // Hiçbir eşleşme bulunamazsa -1 döndür
}
int main(void)
{
int dizi[] = { 10, 20, 30, 40, 50, 100, 0 };
int aranacakDeger = 100;
int boyut = 7; // Dizi boyutu
int sonuc = LINEAR_SEARCH(dizi, boyut, aranacakDeger);
if (sonuc == -1)
printf("ELEMAN BULUNAMADI!!\n");
else
printf("Aranan deger %d indeksinde bulundu.\n", sonuc);
return 0;
}
Çıktı:
Aranan deger 5 indeksinde bulundu.
💡 Bu fonksiyon, 100 değerini dizi içinde bulup indeksini döndürür.
⏱️ 5. Lineer Arama Zaman Karmaşıklığı
Zaman karmaşıklığı, algoritmanın dizinin boyutuna göre ne kadar işlem yaptığını gösterir.
| Durum | Açıklama | Zaman Karmaşıklığı |
|---|---|---|
| En iyi durum | Aranan eleman ilk sırada | O(1) |
| Ortalama durum | Eleman rastgele konumda | O(n/2) ≈ O(n) |
| En kötü durum | Eleman yok veya sonda | O(n) |
📈 n = dizi boyutu. Yani dizi büyüdükçe işlem sayısı da doğrusal artar.
❓ Sıkça Sorulan Sorular (SSS)
1. Lineer Arama hangi durumlarda tercih edilmelidir?
Küçük veya sıralı olmayan dizilerde basitliği sayesinde idealdir.
2. İkili Arama (Binary Search) ile farkı nedir?
Binary Search sadece sıralı dizilerde çalışır. Lineer Arama ise sıralı olmayan dizilerde de etkilidir.
3. C kodunda -1 ne anlama gelir?
Fonksiyonun -1 döndürmesi, aranan elemanın dizide bulunamadığını ifade eder.
4. Lineer Arama büyük veri kümelerinde uygun mudur?
Hayır. Büyük veri kümelerinde O(n) karmaşıklığı nedeniyle yavaş çalışır. Alternatif olarak Binary Search veya hash tabloları tercih edilebilir.
5. Neden Rabisu Bulut örneklerinde Lineer Arama öğretiliyor?
Çünkü algoritmik düşünmeyi öğretmek için en anlaşılır örneklerden biridir. Gerçek sistemlerde (örneğin sunucu log analizi) temel mantığı sıkça kullanılır.
🏁 Sonuç
Lineer Arama algoritması, basit ama öğretici bir yöntemdir. Sıralı olmayan küçük veri kümelerinde etkilidir, ancak büyük sistemlerde optimizasyon gerektirir.
💡 C dilinde kendi algoritmalarınızı Rabisu Bulut üzerinde test ederek performans farklarını anında gözlemleyebilirsiniz.